/**
 * 格式化日期时间为自定义格式
 * @param dateStr 日期字符串或Date对象
 * @param isBackendTime 是否来自后端的时间（需要调整时区）
 * @returns 格式化后的日期字符串
 */
export function formatDateTime(
  dateStr: string | Date,
  isBackendTime: boolean = true
): string {
  try {
    // 创建日期对象
    let date: Date;

    if (typeof dateStr === "string") {
      // 解析日期字符串
      const parsedDate = new Date(dateStr);

      // 检查是否需要调整时区
      if (isBackendTime) {
        // 是否为明确的ISO格式带Z的字符串
        const isISOWithZ = dateStr.includes("T") && dateStr.endsWith("Z");

        if (isISOWithZ) {
          // ISO格式已包含时区信息，JavaScript会自动处理
          date = parsedDate;
        } else {
          // 非标准ISO格式或无时区信息，手动添加8小时
          date = new Date(parsedDate.getTime() + 8 * 60 * 60 * 1000);
        }
      } else {
        // 本地创建的时间对象，不需要调整
        date = parsedDate;
      }
    } else {
      // 已经是Date对象，不需要额外处理
      date = dateStr;
    }

    // 检查日期是否有效
    if (isNaN(date.getTime())) {
      return dateStr.toString();
    }

    // 获取年月日
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, "0");
    const day = String(date.getDate()).padStart(2, "0");

    // 获取时分
    const hours = String(date.getHours()).padStart(2, "0");
    const minutes = String(date.getMinutes()).padStart(2, "0");

    // 同一天显示时间，不同天显示日期
    const today = new Date();
    const isToday =
      date.getDate() === today.getDate() &&
      date.getMonth() === today.getMonth() &&
      date.getFullYear() === today.getFullYear();

    if (isToday) {
      return `今天 ${hours}:${minutes}`;
    }

    const yesterday = new Date(today);
    yesterday.setDate(yesterday.getDate() - 1);
    const isYesterday =
      date.getDate() === yesterday.getDate() &&
      date.getMonth() === yesterday.getMonth() &&
      date.getFullYear() === yesterday.getFullYear();

    if (isYesterday) {
      return `昨天 ${hours}:${minutes}`;
    }

    // 当年的日期不显示年份
    if (date.getFullYear() === today.getFullYear()) {
      return `${month}-${day} ${hours}:${minutes}`;
    }

    // 不是当年的日期显示完整日期
    return `${year}-${month}-${day} ${hours}:${minutes}`;
  } catch (error) {
    console.error("日期格式化错误:", error);
    return dateStr.toString();
  }
}
